<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow: flow::async::Timed_concurrent_task_loop Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow project: Public API.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceflow.html">flow</a></li><li class="navelem"><a class="el" href="namespaceflow_1_1async.html">async</a></li><li class="navelem"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop.html">Timed_concurrent_task_loop</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classflow_1_1async_1_1Timed__concurrent__task__loop-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">flow::async::Timed_concurrent_task_loop Class Reference</div></div>
</div><!--header-->
<div class="contents">

<p>Decorates a general &ndash; potentially multi-threaded &ndash; <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html" title="The core flow::async interface, providing an optionally multi-threaded thread pool onto which runnabl...">Concurrent_task_loop</a> of any kind but with timing capabilities.  
 <a href="classflow_1_1async_1_1Timed__concurrent__task__loop.html#details">More...</a></p>

<p><code>#include &lt;timed_concurrent_task_loop.hpp&gt;</code></p>
<div class="dynheader">
Inheritance diagram for flow::async::Timed_concurrent_task_loop:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__inherit__graph.svg" width="760" height="71"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for flow::async::Timed_concurrent_task_loop:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1async_1_1Timed__concurrent__task__loop__coll__graph.svg" width="760" height="71"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a38f7effbd882c15178dc821306e8a0bc"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop.html#a38f7effbd882c15178dc821306e8a0bc">Timed_concurrent_task_loop</a> (<a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">Concurrent_task_loop</a> *loop, <a class="el" href="namespaceflow_1_1perf.html#ad61fb186191e4bb824d14601d11a2eb0">perf::Clock_type</a> clock_type=<a class="el" href="namespaceflow_1_1perf.html#ad61fb186191e4bb824d14601d11a2eb0a93867c73fb6ef991268c0052153344c2">perf::Clock_type::S_CPU_THREAD_TOTAL_HI_RES</a>)</td></tr>
<tr class="memdesc:a38f7effbd882c15178dc821306e8a0bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a time-accumulating version of existing loop <code>*loop</code>.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop.html#a38f7effbd882c15178dc821306e8a0bc">More...</a><br /></td></tr>
<tr class="separator:a38f7effbd882c15178dc821306e8a0bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl&lt; std::atomic&lt; perf::duration_rep_t &gt; &gt;</a></td></tr>
<tr class="memitem:aedbd4d34c2bdd56fdcf93ed43c714f70 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#aedbd4d34c2bdd56fdcf93ed43c714f70">Timed_concurrent_task_loop_impl</a> (<a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">Concurrent_task_loop</a> *loop, <a class="el" href="namespaceflow_1_1perf.html#ad61fb186191e4bb824d14601d11a2eb0">perf::Clock_type</a> clock_type, <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a881d40bcfea87884f6f5e9ee4a90c578">Exchanger_func</a> &amp;&amp;exchanger_func_moved)</td></tr>
<tr class="memdesc:aedbd4d34c2bdd56fdcf93ed43c714f70 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a time-accumulating version of existing loop <code>*loop</code>.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#aedbd4d34c2bdd56fdcf93ed43c714f70">More...</a><br /></td></tr>
<tr class="separator:aedbd4d34c2bdd56fdcf93ed43c714f70 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6659220efe57750c9d8cd8e185d3299a inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a6659220efe57750c9d8cd8e185d3299a">start</a> (<a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;init_task_or_empty=<a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a>(), const <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aa164fb1fe1b3d7fce0de0174d77ea396">Thread_init_func</a> &amp;thread_init_func_or_empty=<a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aa164fb1fe1b3d7fce0de0174d77ea396">Thread_init_func</a>()) override</td></tr>
<tr class="memdesc:a6659220efe57750c9d8cd8e185d3299a inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a6659220efe57750c9d8cd8e185d3299a">More...</a><br /></td></tr>
<tr class="separator:a6659220efe57750c9d8cd8e185d3299a inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad0ee24a26236098dfd67b68da120ff69 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top"><a id="ad0ee24a26236098dfd67b68da120ff69" name="ad0ee24a26236098dfd67b68da120ff69"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>stop</b> () override</td></tr>
<tr class="memdesc:ad0ee24a26236098dfd67b68da120ff69 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API. <br /></td></tr>
<tr class="separator:ad0ee24a26236098dfd67b68da120ff69 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2138f93d5fd11407973a7b7b13ca7353 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a2138f93d5fd11407973a7b7b13ca7353">n_threads</a> () const override</td></tr>
<tr class="memdesc:a2138f93d5fd11407973a7b7b13ca7353 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a2138f93d5fd11407973a7b7b13ca7353">More...</a><br /></td></tr>
<tr class="separator:a2138f93d5fd11407973a7b7b13ca7353 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8dd2594499859628be0ed997b5ca4643 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a8dd2594499859628be0ed997b5ca4643">create_op</a> () override</td></tr>
<tr class="memdesc:a8dd2594499859628be0ed997b5ca4643 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a8dd2594499859628be0ed997b5ca4643">More...</a><br /></td></tr>
<tr class="separator:a8dd2594499859628be0ed997b5ca4643 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9c2676395574264b88a4c1f3b7b64b6e inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classflow_1_1async_1_1Op__list.html">Op_list</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a9c2676395574264b88a4c1f3b7b64b6e">per_thread_ops</a> () override</td></tr>
<tr class="memdesc:a9c2676395574264b88a4c1f3b7b64b6e inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a9c2676395574264b88a4c1f3b7b64b6e">More...</a><br /></td></tr>
<tr class="separator:a9c2676395574264b88a4c1f3b7b64b6e inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adb9a4a09e821aad135cfa1f493624630 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#adb9a4a09e821aad135cfa1f493624630">post</a> (<a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;task, <a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485">Synchronicity</a> synchronicity=Synchronicity::S_ASYNC) override</td></tr>
<tr class="memdesc:adb9a4a09e821aad135cfa1f493624630 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#adb9a4a09e821aad135cfa1f493624630">More...</a><br /></td></tr>
<tr class="separator:adb9a4a09e821aad135cfa1f493624630 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ac438177671657e14f0fce378bce445 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a3ac438177671657e14f0fce378bce445">post</a> (const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op, <a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;task, <a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485">Synchronicity</a> synchronicity=Synchronicity::S_ASYNC) override</td></tr>
<tr class="memdesc:a3ac438177671657e14f0fce378bce445 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a3ac438177671657e14f0fce378bce445">More...</a><br /></td></tr>
<tr class="separator:a3ac438177671657e14f0fce378bce445 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79b1d2f2b5bf4fdf16e7701fe3bb44d1 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a79b1d2f2b5bf4fdf16e7701fe3bb44d1">schedule_from_now</a> (const <a class="el" href="namespaceflow.html#a48799f1263cdeedec125be51a3db2b79">Fine_duration</a> &amp;from_now, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task) override</td></tr>
<tr class="memdesc:a79b1d2f2b5bf4fdf16e7701fe3bb44d1 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a79b1d2f2b5bf4fdf16e7701fe3bb44d1">More...</a><br /></td></tr>
<tr class="separator:a79b1d2f2b5bf4fdf16e7701fe3bb44d1 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0b5365734728eff8c995510a91b36be inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#ae0b5365734728eff8c995510a91b36be">schedule_from_now</a> (const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op, const <a class="el" href="namespaceflow.html#a48799f1263cdeedec125be51a3db2b79">Fine_duration</a> &amp;from_now, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task) override</td></tr>
<tr class="memdesc:ae0b5365734728eff8c995510a91b36be inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#ae0b5365734728eff8c995510a91b36be">More...</a><br /></td></tr>
<tr class="separator:ae0b5365734728eff8c995510a91b36be inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2c3566acb42c14ce7fe31026a711a30b inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a2c3566acb42c14ce7fe31026a711a30b">schedule_at</a> (const <a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a> &amp;at, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task) override</td></tr>
<tr class="memdesc:a2c3566acb42c14ce7fe31026a711a30b inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a2c3566acb42c14ce7fe31026a711a30b">More...</a><br /></td></tr>
<tr class="separator:a2c3566acb42c14ce7fe31026a711a30b inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d6b084d36b2bd119d73486be13fcf99 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a7d6b084d36b2bd119d73486be13fcf99">schedule_at</a> (const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op, const <a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a> &amp;at, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task) override</td></tr>
<tr class="memdesc:a7d6b084d36b2bd119d73486be13fcf99 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">See superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a7d6b084d36b2bd119d73486be13fcf99">More...</a><br /></td></tr>
<tr class="separator:a7d6b084d36b2bd119d73486be13fcf99 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5864fb0f46b84d5783ad194796c25f5 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1async.html#a968806f54b14c697fd76b3339a2bdbbf">Task_engine_ptr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#ab5864fb0f46b84d5783ad194796c25f5">task_engine</a> () override</td></tr>
<tr class="memdesc:ab5864fb0f46b84d5783ad194796c25f5 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">See superclass API.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#ab5864fb0f46b84d5783ad194796c25f5">More...</a><br /></td></tr>
<tr class="separator:ab5864fb0f46b84d5783ad194796c25f5 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45c91b87a9906781479e2387f2f93573 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1perf.html#a38e42ae0923eb23052e3a8a1e7956456">perf::Duration</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a45c91b87a9906781479e2387f2f93573">accumulated_time</a> ()</td></tr>
<tr class="memdesc:a45c91b87a9906781479e2387f2f93573 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the accumulated time spent on tasks this thread pool handles since its last invocation; and reset the accumulated time.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a45c91b87a9906781479e2387f2f93573">More...</a><br /></td></tr>
<tr class="separator:a45c91b87a9906781479e2387f2f93573 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9e915ee364537114a9e2f50574d960b7 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a9e915ee364537114a9e2f50574d960b7">asio_handler_timed</a> (Handler &amp;&amp;handler_moved)</td></tr>
<tr class="memdesc:a9e915ee364537114a9e2f50574d960b7 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given a boost.asio <em>completion handler</em> <code>handler</code> for a boost.asio <code>async_*()</code> action on some boost.asio I/O object to be initiated in the immediate near future, returns a wrapped handler with the same signature to be passed as the handler arg to that <code>async_*()</code> action, so that <code>handler()</code> will be properly timed.  <a href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a9e915ee364537114a9e2f50574d960b7">More...</a><br /></td></tr>
<tr class="separator:a9e915ee364537114a9e2f50574d960b7 inherit pub_methods_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classflow_1_1async_1_1Concurrent__task__loop')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">flow::async::Concurrent_task_loop</a></td></tr>
<tr class="memitem:a7b9123d43e1cfae899b0e1bb52bb6dde inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a7b9123d43e1cfae899b0e1bb52bb6dde">~Concurrent_task_loop</a> () override</td></tr>
<tr class="memdesc:a7b9123d43e1cfae899b0e1bb52bb6dde inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Any implementing subclass's destructor shall execute <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aadadb5b8b6c40ddc86c205de1b8f25b1" title="Waits for any ongoing task(s)/completion handler(s) to return; then prevents any further-queued such ...">stop()</a> &ndash; see its doc header please &ndash; and then clean up any resources.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#a7b9123d43e1cfae899b0e1bb52bb6dde">More...</a><br /></td></tr>
<tr class="separator:a7b9123d43e1cfae899b0e1bb52bb6dde inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afff5e62840791b309e178c5ddc26e594 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#afff5e62840791b309e178c5ddc26e594">start</a> (<a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;init_task_or_empty=<a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a>(), const <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aa164fb1fe1b3d7fce0de0174d77ea396">Thread_init_func</a> &amp;thread_init_func_or_empty=<a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aa164fb1fe1b3d7fce0de0174d77ea396">Thread_init_func</a>())=0</td></tr>
<tr class="memdesc:afff5e62840791b309e178c5ddc26e594 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Starts all threads in the thread pool; any queued <code><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6" title="Cause the given Task (function) to execute within the thread pool as soon as possible,...">post()</a></code>ed (and similar) tasks may begin executing immediately; and any future posted work may execute in these threads.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#afff5e62840791b309e178c5ddc26e594">More...</a><br /></td></tr>
<tr class="separator:afff5e62840791b309e178c5ddc26e594 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aadadb5b8b6c40ddc86c205de1b8f25b1 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#aadadb5b8b6c40ddc86c205de1b8f25b1">stop</a> ()=0</td></tr>
<tr class="memdesc:aadadb5b8b6c40ddc86c205de1b8f25b1 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Waits for any ongoing task(s)/completion handler(s) to return; then prevents any further-queued such tasks from running; then gracefully stops/joins all threads in pool; and then returns.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#aadadb5b8b6c40ddc86c205de1b8f25b1">More...</a><br /></td></tr>
<tr class="separator:aadadb5b8b6c40ddc86c205de1b8f25b1 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a131335863b19446dbc349de181d4b5a1 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a131335863b19446dbc349de181d4b5a1">n_threads</a> () const =0</td></tr>
<tr class="memdesc:a131335863b19446dbc349de181d4b5a1 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">How many threads does <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#afff5e62840791b309e178c5ddc26e594" title="Starts all threads in the thread pool; any queued post()ed (and similar) tasks may begin executing im...">start()</a> start?  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#a131335863b19446dbc349de181d4b5a1">More...</a><br /></td></tr>
<tr class="separator:a131335863b19446dbc349de181d4b5a1 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4ee1c5f5785af0bcc6aed0757981ffe3 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a4ee1c5f5785af0bcc6aed0757981ffe3">create_op</a> ()=0</td></tr>
<tr class="memdesc:a4ee1c5f5785af0bcc6aed0757981ffe3 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a new Op which can bundle together an arbitrary set of <code><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6" title="Cause the given Task (function) to execute within the thread pool as soon as possible,...">post()</a></code>s that would result in the provided task functions executing non-concurrently.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#a4ee1c5f5785af0bcc6aed0757981ffe3">More...</a><br /></td></tr>
<tr class="separator:a4ee1c5f5785af0bcc6aed0757981ffe3 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a54bd938b133103328a90d50823755358 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual const <a class="el" href="classflow_1_1async_1_1Op__list.html">Op_list</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a54bd938b133103328a90d50823755358">per_thread_ops</a> ()=0</td></tr>
<tr class="memdesc:a54bd938b133103328a90d50823755358 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the optional-use, pre-created collection of per-thread <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949" title="An object of this opaque type represents a collection of 1 or more async::Task, past or future,...">async::Op</a> objects, such that the i-th <code>Op</code> therein corresponds to the i-th (of N, where N = # of threads in this pool) thread.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#a54bd938b133103328a90d50823755358">More...</a><br /></td></tr>
<tr class="separator:a54bd938b133103328a90d50823755358 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a24f96f97ee24bfabb06c8609bc0e94a6 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6">post</a> (<a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;task, <a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485">Synchronicity</a> synchronicity=<a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485a4d7a5700444c0570af37b1f9bcc6eb1f">Synchronicity::S_ASYNC</a>)=0</td></tr>
<tr class="memdesc:a24f96f97ee24bfabb06c8609bc0e94a6 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cause the given <code>Task</code> (function) to execute within the thread pool as soon as possible, in the first thread available, in otherwise first-come-first-served fashion.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6">More...</a><br /></td></tr>
<tr class="separator:a24f96f97ee24bfabb06c8609bc0e94a6 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0e31275441218c4d77df0730fd5e8f7 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ab0e31275441218c4d77df0730fd5e8f7">post</a> (const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op, <a class="el" href="namespaceflow_1_1async.html#af35fb65bdea1a3a92929ec2c4a6a6b72">Task</a> &amp;&amp;task, <a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485">Synchronicity</a> synchronicity=<a class="el" href="namespaceflow_1_1async.html#a0a06794b16b72f2829ce3353557c8485a4d7a5700444c0570af37b1f9bcc6eb1f">Synchronicity::S_ASYNC</a>)=0</td></tr>
<tr class="memdesc:ab0e31275441218c4d77df0730fd5e8f7 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Identical to the other <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6" title="Cause the given Task (function) to execute within the thread pool as soon as possible,...">post()</a> with the added constraint that no other <code>Task</code> <em>also</em> similarly posted with the equivalent <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949" title="An object of this opaque type represents a collection of 1 or more async::Task, past or future,...">async::Op</a> may execute concurrently.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#ab0e31275441218c4d77df0730fd5e8f7">More...</a><br /></td></tr>
<tr class="separator:ab0e31275441218c4d77df0730fd5e8f7 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6b98b440d52c079c22d7972c9b12e1b inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ac6b98b440d52c079c22d7972c9b12e1b">schedule_from_now</a> (const <a class="el" href="namespaceflow.html#a48799f1263cdeedec125be51a3db2b79">Fine_duration</a> &amp;from_now, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task)=0</td></tr>
<tr class="memdesc:ac6b98b440d52c079c22d7972c9b12e1b inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to 2-argument <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6" title="Cause the given Task (function) to execute within the thread pool as soon as possible,...">post()</a> but execution is scheduled for later, after the given time period passes.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#ac6b98b440d52c079c22d7972c9b12e1b">More...</a><br /></td></tr>
<tr class="separator:ac6b98b440d52c079c22d7972c9b12e1b inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad0ca0710d990c15cb9ea31535bea24cc inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ad0ca0710d990c15cb9ea31535bea24cc">schedule_at</a> (const <a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a> &amp;at, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task)=0</td></tr>
<tr class="memdesc:ad0ca0710d990c15cb9ea31535bea24cc inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to 2-argument <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ac6b98b440d52c079c22d7972c9b12e1b" title="Equivalent to 2-argument post() but execution is scheduled for later, after the given time period pas...">schedule_from_now()</a> except one specifies an absolute time point instead of wait duration.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#ad0ca0710d990c15cb9ea31535bea24cc">More...</a><br /></td></tr>
<tr class="separator:ad0ca0710d990c15cb9ea31535bea24cc inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af3b04e2c7c2c8ee484a38b1156f8acc0 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#af3b04e2c7c2c8ee484a38b1156f8acc0">schedule_from_now</a> (const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op, const <a class="el" href="namespaceflow.html#a48799f1263cdeedec125be51a3db2b79">Fine_duration</a> &amp;from_now, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task)=0</td></tr>
<tr class="memdesc:af3b04e2c7c2c8ee484a38b1156f8acc0 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to 3-argument <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a24f96f97ee24bfabb06c8609bc0e94a6" title="Cause the given Task (function) to execute within the thread pool as soon as possible,...">post()</a> but execution is scheduled for later, after the given time period passes.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#af3b04e2c7c2c8ee484a38b1156f8acc0">More...</a><br /></td></tr>
<tr class="separator:af3b04e2c7c2c8ee484a38b1156f8acc0 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab1961159746ebe8b1787eadfbf728287 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceflow_1_1util.html#aa0d10f5a906b3229f48979aa43e9ff7e">util::Scheduled_task_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ab1961159746ebe8b1787eadfbf728287">schedule_at</a> (const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op, const <a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a> &amp;at, <a class="el" href="namespaceflow_1_1async.html#af8c06052dd887bc77444550a7c243154">Scheduled_task</a> &amp;&amp;task)=0</td></tr>
<tr class="memdesc:ab1961159746ebe8b1787eadfbf728287 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to 3-argument <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ac6b98b440d52c079c22d7972c9b12e1b" title="Equivalent to 2-argument post() but execution is scheduled for later, after the given time period pas...">schedule_from_now()</a> except one specifies an absolute time point instead of wait duration.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#ab1961159746ebe8b1787eadfbf728287">More...</a><br /></td></tr>
<tr class="separator:ab1961159746ebe8b1787eadfbf728287 inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac446f6bfed9fb54d073a5f3f578ec4bb inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceflow_1_1async.html#a968806f54b14c697fd76b3339a2bdbbf">Task_engine_ptr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#ac446f6bfed9fb54d073a5f3f578ec4bb">task_engine</a> ()=0</td></tr>
<tr class="memdesc:ac446f6bfed9fb54d073a5f3f578ec4bb inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a pointer to <em>an</em> internal <a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4" title="Short-hand for boost.asio event service, the central class of boost.asio.">util::Task_engine</a> (a/k/a boost.asio <code>io_context</code>) for the purpose of performing a boost.asio <code>async_*()</code> action on some boost.asio I/O object in the immediate near future.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#ac446f6bfed9fb54d073a5f3f578ec4bb">More...</a><br /></td></tr>
<tr class="separator:ac446f6bfed9fb54d073a5f3f578ec4bb inherit pub_methods_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classflow_1_1util_1_1Null__interface"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classflow_1_1util_1_1Null__interface')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classflow_1_1util_1_1Null__interface.html">flow::util::Null_interface</a></td></tr>
<tr class="memitem:a5916282577627e424a09884347eddbba inherit pub_methods_classflow_1_1util_1_1Null__interface"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Null__interface.html#a5916282577627e424a09884347eddbba">~Null_interface</a> ()=0</td></tr>
<tr class="memdesc:a5916282577627e424a09884347eddbba inherit pub_methods_classflow_1_1util_1_1Null__interface"><td class="mdescLeft">&#160;</td><td class="mdescRight">Boring <code>virtual</code> destructor.  <a href="classflow_1_1util_1_1Null__interface.html#a5916282577627e424a09884347eddbba">More...</a><br /></td></tr>
<tr class="separator:a5916282577627e424a09884347eddbba inherit pub_methods_classflow_1_1util_1_1Null__interface"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="inherited" name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pub_types_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classflow_1_1async_1_1Timed__concurrent__task__loop__impl')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html">flow::async::Timed_concurrent_task_loop_impl&lt; std::atomic&lt; perf::duration_rep_t &gt; &gt;</a></td></tr>
<tr class="memitem:a881d40bcfea87884f6f5e9ee4a90c578 inherit pub_types_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memItemLeft" align="right" valign="top"><a id="a881d40bcfea87884f6f5e9ee4a90c578" name="a881d40bcfea87884f6f5e9ee4a90c578"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>Exchanger_func</b> = Function&lt; <a class="el" href="namespaceflow_1_1perf.html#a75b06c669e720c60621f3c68c3d34408">perf::duration_rep_t</a>(std::atomic&lt; <a class="el" href="namespaceflow_1_1perf.html#a75b06c669e720c60621f3c68c3d34408">perf::duration_rep_t</a> &gt; *)&gt;</td></tr>
<tr class="memdesc:a881d40bcfea87884f6f5e9ee4a90c578 inherit pub_types_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for the exhanger function taken by the ctor. <br /></td></tr>
<tr class="separator:a881d40bcfea87884f6f5e9ee4a90c578 inherit pub_types_classflow_1_1async_1_1Timed__concurrent__task__loop__impl"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classflow_1_1async_1_1Concurrent__task__loop"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classflow_1_1async_1_1Concurrent__task__loop')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">flow::async::Concurrent_task_loop</a></td></tr>
<tr class="memitem:aa164fb1fe1b3d7fce0de0174d77ea396 inherit pub_types_classflow_1_1async_1_1Concurrent__task__loop"><td class="memItemLeft" align="right" valign="top"><a id="aa164fb1fe1b3d7fce0de0174d77ea396" name="aa164fb1fe1b3d7fce0de0174d77ea396"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>Thread_init_func</b> = Function&lt; void(size_t thread_idx)&gt;</td></tr>
<tr class="memdesc:aa164fb1fe1b3d7fce0de0174d77ea396 inherit pub_types_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for the thread-initializer-function optional arg type to <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#afff5e62840791b309e178c5ddc26e594" title="Starts all threads in the thread pool; any queued post()ed (and similar) tasks may begin executing im...">start()</a>. <br /></td></tr>
<tr class="separator:aa164fb1fe1b3d7fce0de0174d77ea396 inherit pub_types_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header related_classflow_1_1async_1_1Concurrent__task__loop"><td colspan="2" onclick="javascript:toggleInherit('related_classflow_1_1async_1_1Concurrent__task__loop')"><img src="closed.png" alt="-"/>&#160;Related Functions inherited from <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">flow::async::Concurrent_task_loop</a></td></tr>
<tr class="memitem:a7f2f976a53191a3b0cd28898bb23c551 inherit related_classflow_1_1async_1_1Concurrent__task__loop"><td class="memTemplParams" colspan="2">template&lt;typename Exec_ctx_ptr &gt; </td></tr>
<tr class="memitem:a7f2f976a53191a3b0cd28898bb23c551 inherit related_classflow_1_1async_1_1Concurrent__task__loop"><td class="memTemplItemLeft" align="right" valign="top">Exec_ctx_ptr&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html#a7f2f976a53191a3b0cd28898bb23c551">op_to_exec_ctx</a> (<a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">Concurrent_task_loop</a> *loop, const <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949">Op</a> &amp;op)</td></tr>
<tr class="memdesc:a7f2f976a53191a3b0cd28898bb23c551 inherit related_classflow_1_1async_1_1Concurrent__task__loop"><td class="mdescLeft">&#160;</td><td class="mdescRight">Template specialization model for operation that obtains the underlying execution context, such as a <a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4" title="Short-hand for boost.asio event service, the central class of boost.asio.">util::Task_engine</a> or <a class="el" href="namespaceflow_1_1util.html#aa59354ab408e978c8a7bda1a4706924e" title="Short-hand for boost.asio strand, an ancillary class that works with Task_engine for advanced task sc...">util::Strand</a>, stored in an <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949" title="An object of this opaque type represents a collection of 1 or more async::Task, past or future,...">async::Op</a> generated by the given <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html" title="The core flow::async interface, providing an optionally multi-threaded thread pool onto which runnabl...">Concurrent_task_loop</a>.  <a href="classflow_1_1async_1_1Concurrent__task__loop.html#a7f2f976a53191a3b0cd28898bb23c551">More...</a><br /></td></tr>
<tr class="separator:a7f2f976a53191a3b0cd28898bb23c551 inherit related_classflow_1_1async_1_1Concurrent__task__loop"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Decorates a general &ndash; potentially multi-threaded &ndash; <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html" title="The core flow::async interface, providing an optionally multi-threaded thread pool onto which runnabl...">Concurrent_task_loop</a> of any kind but with timing capabilities. </p>
<p >Using one of these is identical to using the underlying <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html" title="The core flow::async interface, providing an optionally multi-threaded thread pool onto which runnabl...">Concurrent_task_loop</a>; except that after constructing it it must be passed to this class's ctor. From that point on, <code>*this</code> is identical to that underlying loop object, except that all relevant handlers posted onto it will be timed. One can then access the result (and reset the accumulator to zero) simply by calling <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a45c91b87a9906781479e2387f2f93573" title="Returns the accumulated time spent on tasks this thread pool handles since its last invocation; and r...">accumulated_time()</a>.</p>
<p >The following tasks shall be timed, with results accessible via <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a45c91b87a9906781479e2387f2f93573" title="Returns the accumulated time spent on tasks this thread pool handles since its last invocation; and r...">accumulated_time()</a>:</p><ul>
<li>Anything posted via <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#adb9a4a09e821aad135cfa1f493624630" title="Implements superclass API.">post()</a>.</li>
<li>Anything scheduled via <code>schedule_task_*()</code>.</li>
<li>Anything invoked directly through a boost.asio <code>async_*()</code> API, as long as:<ul>
<li>either it is wrapped via <a class="el" href="namespaceflow_1_1async.html#af90c1e763d49c3f3033a74871e897394" title="Given a boost.asio completion handler handler for a boost.asio async_*() action on some boost....">asio_handler_via_op()</a> (to execute through an <a class="el" href="namespaceflow_1_1async.html#a024042c64b7dc544a7a5587afa4b1949" title="An object of this opaque type represents a collection of 1 or more async::Task, past or future,...">async::Op</a>);</li>
<li>or it is wrapped via <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a9e915ee364537114a9e2f50574d960b7" title="Given a boost.asio completion handler handler for a boost.asio async_*() action on some boost....">asio_handler_timed()</a> (otherwise).</li>
</ul>
</li>
</ul>
<dl class="section warning"><dt>Warning</dt><dd>Unfortunately, any "naked" handler passed to a boost.asio async procedure will not be timed; so don't forget to use a wrapper (presumably <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a9e915ee364537114a9e2f50574d960b7" title="Given a boost.asio completion handler handler for a boost.asio async_*() action on some boost....">asio_handler_timed()</a>). The key point: 3/4 posting techniques listed above are identical in use to general use of <a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html" title="The core flow::async interface, providing an optionally multi-threaded thread pool onto which runnabl...">Concurrent_task_loop</a> as explained in that class's doc header. The exception is the need to use <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html#a9e915ee364537114a9e2f50574d960b7" title="Given a boost.asio completion handler handler for a boost.asio async_*() action on some boost....">asio_handler_timed()</a> when dealing with "naked" boost.asio handlers (the last bullet point above). </dd></dl>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a38f7effbd882c15178dc821306e8a0bc" name="a38f7effbd882c15178dc821306e8a0bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a38f7effbd882c15178dc821306e8a0bc">&#9670;&nbsp;</a></span>Timed_concurrent_task_loop()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::async::Timed_concurrent_task_loop::Timed_concurrent_task_loop </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1async_1_1Concurrent__task__loop.html">Concurrent_task_loop</a> *&#160;</td>
          <td class="paramname"><em>loop</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1perf.html#ad61fb186191e4bb824d14601d11a2eb0">perf::Clock_type</a>&#160;</td>
          <td class="paramname"><em>clock_type</em> = <code><a class="el" href="namespaceflow_1_1perf.html#ad61fb186191e4bb824d14601d11a2eb0a93867c73fb6ef991268c0052153344c2">perf::Clock_type::S_CPU_THREAD_TOTAL_HI_RES</a></code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructs a time-accumulating version of existing loop <code>*loop</code>. </p>
<p ><code>*loop</code> must exist at least until <code>*this</code> is destroyed.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">clock_type</td><td>See <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html" title="Decorator of a Concurrent_task_loop with same or greater lifetime that accumulates time elapsed in an...">Timed_concurrent_task_loop_impl</a> ctor. </td></tr>
    <tr><td class="paramname">loop</td><td>See <a class="el" href="classflow_1_1async_1_1Timed__concurrent__task__loop__impl.html" title="Decorator of a Concurrent_task_loop with same or greater lifetime that accumulates time elapsed in an...">Timed_concurrent_task_loop_impl</a> ctor. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>async/<a class="el" href="timed__concurrent__task__loop_8hpp.html">timed_concurrent_task_loop.hpp</a></li>
<li>async/<a class="el" href="timed__concurrent__task__loop_8cpp.html">timed_concurrent_task_loop.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2025 22:55:32 for Flow by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
